package br.com.divulgaqui.service;

import java.util.List;

import javax.annotation.PostConstruct;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

import org.jboss.logging.Logger;

import br.com.divulgaqui.client.PacoteAnuncioServiceBeanLocal;
import br.com.divulgaqui.client.PacoteAnuncioServiceBeanRemote;
import br.com.divulgaqui.client.exception.PacoteAnuncioPublicadoException;
import br.com.divulgaqui.client.exception.ValoPacoteAnuncioException;
import br.com.divulgaqui.entity.PacoteAnuncio;
import br.com.divulgaqui.persistence.dao.PacoteAnuncioDAO;
import br.com.divulgaqui.persistence.daoimpl.PacoteAnuncioDAOImpl;

/**
 * Session Bean implementation class PacoteAnuncioServiceBean
 */
@Stateless
public class PacoteAnuncioServiceBean implements PacoteAnuncioServiceBeanRemote, PacoteAnuncioServiceBeanLocal {

	@PersistenceContext
	private EntityManager entityManager;
	private PacoteAnuncioDAO pacoteAnuncioDAO;
	private Logger logg = Logger.getLogger(PacoteAnuncioServiceBean.class);
	
    /**
     * Default constructor. 
     */
    public PacoteAnuncioServiceBean() {       
    }
    
    @PostConstruct
    public void init(){
    	pacoteAnuncioDAO = new PacoteAnuncioDAOImpl(entityManager);
    }

	@Override
	public void salvar(PacoteAnuncio pacoteAnuncio)throws ValoPacoteAnuncioException {
		if(pacoteAnuncio.getValor() == null || pacoteAnuncio.getValor() <= 0){
			logg.warn("Valor do pacote null ou <= 0");
			throw new ValoPacoteAnuncioException();
		}
		pacoteAnuncioDAO.salvar(pacoteAnuncio);
	}

	@Override	
	public List<PacoteAnuncio> listar() {		
		return pacoteAnuncioDAO.listar();
	}

	@Override
	public void publicar(PacoteAnuncio pacoteAnuncio) {
		pacoteAnuncio = pacoteAnuncioDAO.getPorId(pacoteAnuncio.getId());
		pacoteAnuncio.setPublicado(true);
		pacoteAnuncio.setAtivo(true);
		pacoteAnuncioDAO.atualizar(pacoteAnuncio);		
	}

	@Override
	public void excluir(PacoteAnuncio pacoteAnuncio)throws PacoteAnuncioPublicadoException {
		pacoteAnuncio = pacoteAnuncioDAO.getPorId(pacoteAnuncio.getId());		
		if(pacoteAnuncio.getPublicado()){
			logg.warn("Pacote publicado não deve ser excluído");
			throw new PacoteAnuncioPublicadoException();
		}
		pacoteAnuncioDAO.excluir(pacoteAnuncio);
	}

	@Override
	public void desativar(PacoteAnuncio pacoteAnuncio) {
		pacoteAnuncio = pacoteAnuncioDAO.getPorId(pacoteAnuncio.getId());
		pacoteAnuncio.setAtivo(false);
		pacoteAnuncioDAO.atualizar(pacoteAnuncio);		
	}

	@Override
	public List<PacoteAnuncio> listaPacotesPublicos() {		
		return pacoteAnuncioDAO.listaPacotesPublicos();
	}
}
